package com.graduation.project.service.system;

import com.baomidou.mybatisplus.extension.service.IService;
import com.graduation.project.entity.dto.role.SaveOrUpdateRoleDTO;
import com.graduation.project.entity.dto.role.ListRoleDTO;
import com.graduation.project.entity.dto.UpdateStatusDTO;
import com.graduation.project.entity.po.Role;
import com.graduation.project.utils.ResultUtil;

import java.util.List;

/**
 * @author 卑微小峰
 * @date 2022/10/29
 * 角色管理业务接口
 */
public interface RoleManagementService extends IService<Role> {

    /**
     * 新增角色
     * @param input 新增/修改角色输入类
     * @return ResultUtil
     */
    ResultUtil<?> saveRole(SaveOrUpdateRoleDTO input);

    /**
     * 修改角色
     * @param input 新增/修改角色输入类
     * @return ResultUtil
     */
    ResultUtil<?> updateRole(SaveOrUpdateRoleDTO input);

    /**
     * （批量）删除角色：逻辑删除
     * @param idList 选中数据项id集合
     * @return ResultUtil
     */
    ResultUtil<?> batchDeleteRoleById(List<Long> idList);

    /**
     * 根据id修改状态
     * @param input 修改状态输入类
     * @return ResultUtil
     */
    ResultUtil<?> updateRoleStatusById(UpdateStatusDTO input);

    /**
     * （条件）分页查询角色列表
     * @param input 条件查询输入类
     * @return ResultUtil
     */
    ResultUtil<?> listRoleByCondition(ListRoleDTO input);

    /**
     * 查询菜单树
     * @return ResultUtil
     */
    ResultUtil<?> listMenuTree();

    /**
     * 获取已拥有的权限Id集合
     * @param id 角色Id
     * @return ResultUtil
     */
    ResultUtil<?> listMenuIdByRoleId(Long id);

    /**
     * 权限分配
     * @param id 角色id
     * @param menuIds 菜单id集合
     * @return ResultUtil
     */
    ResultUtil<?> menuAssignment(Long id, List<Long> menuIds);
}
